package com.csailing4cloud.csailing.common.redis.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiterDetail {

    /**
     * 限流控制方式
     * @return
     */
    Base base() default Base.General;

    /**
     * 限流控制path
     * 建议过时，防止用的时候误配
     * @return
     */
    String path() default  "";

    /**
     * 时间
     * @return
     */
    long time() default 60;

    /**
     * 时间单位
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 参数名
     * @return
     */
    String[] argNames() default "";

    int permits() default 3;

    enum Base{
        //统一控制,默认对path进行拦截
        General,
        //根据ip控制
        IP,
        //按用户控制,废弃，用不上
        @Deprecated
        User,
        //按参数
        Args
    }
}
